home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / weyl / weyl!!.lha / error.C < prev    next >
C/C++ Source or Header  |  1991-08-15  |  2KB  |  105 lines

  1. /* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
  2. /* The C++ Answer Book */
  3. /* Tony Hansen */
  4. /* All rights reserved. */
  5. // Error function. fmt is a printf-style format string.
  6. // The formatted message is written to the error
  7. // stream and then the function calls exit(1).
  8. #include <stream.h>
  9. #include <stdarg.h>
  10. #include <stdlib.h>
  11. #include "domains.h"
  12.  
  13. void handleFormatOption (const char *fmt, va_list ap) {
  14.   char ch;
  15.   switch (ch = *fmt++) {
  16.     // %% becomes a single %
  17.   case '%':
  18.     cerr.put('%');
  19.     break;
  20.     
  21.     // output string
  22.   case 's':
  23.     {
  24.       char *s = va_arg(ap, char*);
  25.       cerr << s;
  26.     }
  27.     break;
  28.     
  29.     // output decimal integer
  30.   case 'd':
  31.     {
  32.       int s = va_arg(ap, int);
  33.       cerr << s;
  34.     }
  35.     break;
  36.     
  37.     // output character
  38.   case 'c':
  39.     {
  40.       int s = va_arg(ap, int);
  41.       cerr.put(s);
  42.     }
  43.     break;
  44.     
  45.     // Domain Element
  46.   case 'E':
  47.     { 
  48.       DomainElt *d = va_arg(ap, DomainElt *);
  49.       if (!d) cerr << "[Null pointer]";
  50.       else d->printon(cerr);
  51.     }
  52.     break;
  53.  
  54.   default:
  55.     cerr << "\nunknown % sequence: %" << char(ch) << "\n";
  56.     break;
  57.   }
  58. }
  59.  
  60.  
  61. void error(const char *fmt ...)
  62. {
  63.     va_list ap;
  64.     va_start(ap, fmt);
  65.     char ch;
  66.  
  67.     cerr << "Error: ";
  68.     // loop across format string
  69.     while (ch = *fmt++)
  70.     // output normal chars
  71.     if (ch != '%')
  72.         cerr.put(ch);
  73.  
  74.     else
  75.       // found % sequence
  76.       handleFormatOption(fmt, ap);
  77.  
  78.     // all done
  79.     va_end(ap);
  80.     exit(1);
  81. }
  82.  
  83. void warn(const char *fmt ...)
  84. {
  85.     va_list ap;
  86.     va_start(ap, fmt);
  87.     char ch;
  88.  
  89.     cerr << "Warning: ";
  90.     // loop across format string
  91.     while (ch = *fmt++)
  92.     // output normal chars
  93.     if (ch != '%')
  94.         cerr.put(ch);
  95.  
  96.     else
  97.       // found % sequence
  98.       handleFormatOption(fmt, ap);
  99.  
  100.     // all done
  101.     va_end(ap);
  102.     cerr.put('\n');
  103. }
  104.  
  105.